package com.itmk.generator;


import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;

import java.util.Collections;

/**
 * @Author java实战基地
 * @Version 2383404558
 */
public class CodeGenerator {

    public static void main(String[] args) {
        String projectPath = System.getProperty("user.dir") + "/itmk-base-web";
        FastAutoGenerator.create("jdbc:mysql://123.56.87.121:3306/onenet?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8", "root",
                "Hebut2024@Soil")
                .globalConfig(builder -> {
                    builder.author("java实战基地") // 设置作者
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(projectPath + "/src/main/java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.itmk.web") // 设置父包名
                            .moduleName("meteorological_station") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,
                                    projectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.serviceBuilder().formatServiceFileName("%sService");
                    builder.entityBuilder().enableLombok();
//                    builder.mapperBuilder().enableMapperAnnotation().build();
                    builder.controllerBuilder().enableHyphenStyle()  // 开启驼峰转连字符
                            .enableRestStyle();  // 开启生成@RestController 控制器
                    builder.addInclude("meteorological_station");// 设置需要生成的表名
                       //     .addTablePrefix("sys_"); // 设置过滤表前缀
                })
                .execute();
    }

}


///**
// * 策略配置开始
// * addTablePrefix(String…)    增加过滤表前缀
// * addTableSuffix(String…)    增加过滤表后缀
// * addFieldPrefix(String…)    增加过滤字段前缀
// * addFieldSuffix(String…)    增加过滤字段后缀
// * addInclude(String…)    增加表匹配(内存过滤)
// */
//FastAutoGenerator.create(DATA_URL, DATA_USER_NAME, DATA_PASSWORD)
//        .globalConfig(builder -> {
//            builder.outputDir(filePath)
//                    //生成的作者名字
//                    .author("demo")
//                    //需要添加swagger依赖并配置,开启swagger
//                    .enableSwagger()
//                    //时间策略
//                    .dateType(DateType.TIME_PACK)
//                    //格式化时间格式
//                    .commentDate("yyyy-MM-dd")
//                    //禁止打开输出目录，默认false
//                    .disableOpenDir()
//                    //覆盖生成文件
//                    .fileOverride()
//                    .build();
//        })
//        .packageConfig(builder -> {
//            //父包名。如果为空，将下面子包名必须写全部， 否则就只需写子包名
//            builder.parent("com.demo.student")
//                    //实体类包名
//                    .entity("entity")
//                    //控制层包名
//                    .controller("controller")
//                    //mapper层包名
//                    .mapper("templates")
//                    //数据访问层xml包名
//                    .xml("mapper.xml")
//                    //service层包名
//                    .service("service")
//                    //service实现类包名
//                    .serviceImpl("service.impl")
//                    //输出自定义文件时的包名
//                    .other("domain")
//                    //路径配置信息,就是配置各个文件模板的路径信息,这里以mapper.xml为例
//                    .pathInfo(pathInfo)
//                    .build();
//        })
//        .strategyConfig(builder -> {
//            builder.addInclude(tables)
//                    .enableCapitalMode()//开启全局大写命名
//                    .addTablePrefix("t_")
//                    //.disableSqlFilter()//禁用sql过滤:默认(不使用该方法）true
//                    //.enableSchema()//启用schema:默认false
//                    .build();
//            //实体层策略
//            builder.entityBuilder()
//                    .disableSerialVersionUID()//禁用生成SerialVersionUID：默认true
//                    //.superClass(BaseEntity.class)
//                    .enableChainModel()//开启链式模型
//                    .enableLombok()//开启lombok
//                    .enableRemoveIsPrefix()//开启 Boolean 类型字段移除 is 前缀
//                    .enableTableFieldAnnotation()//开启生成实体时生成字段注解
//                    .enableActiveRecord()
//                    .versionColumnName("version")//乐观锁字段名(数据库)
//                    .versionPropertyName("version")//乐观锁属性名(实体)
//                    .logicDeleteColumnName("deleted")//逻辑删除字段名(数据库)
//                    .logicDeletePropertyName("deleted")//逻辑删除属性名(实体)
//                    .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略    默认下划线转驼峰命名:NamingStrategy.underline_to_camel
//                    .columnNaming(NamingStrategy.underline_to_camel)//数据库表字段映射到实体的命名策略    默认为 null，未指定按照 naming 执行
//                    //.addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
//                    //.addIgnoreColumns("age")
//                    .addTableFills(new Column("create_time", FieldFill.INSERT))
//                    .addTableFills(new Property("update_time", FieldFill.INSERT_UPDATE))
//                    .idType(IdType.AUTO)
//                    .formatFileName("%s")
//                    //.enableColumnConstant()//开启生成字段常量    默认值:false
//                    //.enableActiveRecord()//开启 ActiveRecord 模型    默认值:false
//                    .build();
//            //控制层策略
//            builder.controllerBuilder()
//                    //.superClass(BaseController.class)
//                    //.enableHyphenStyle()//开启驼峰转连字符，默认：false
//                    .enableRestStyle()  //开启生成@RestController
//                    .formatFileName("%sController") //格式化文件名称
//                    .build();
//
//            //service文件策略
//            builder.serviceBuilder()
//                    //.superServiceClass(BaseService.class)
//                    // .superServiceImplClass(BaseServiceImpl.class)
//                    .formatServiceFileName("%sService")//格式化 service 接口文件名称
//                    .formatServiceImplFileName("%sServiceImpl")//格式化 service 实现类文件名称
//                    .build();
//
//            //mapper文件策略
//            builder.mapperBuilder()
//                    .superClass(BaseMapper.class)
//                    .enableMapperAnnotation()  //开启mapper注解
//                    .enableBaseResultMap()  //启用xml文件中的BaseResultMap 生成
//                    .enableBaseColumnList()//启用xml文件中的BaseColumnList
//                    //.cache(MyMapperCache.class)  //设置缓存实现类
//                    .formatMapperFileName("%sMapper") //格式化Dao类名称
//                    .formatXmlFileName("%sMapper") //格式化xml文件名称
//                    .build();
//        })
//        //.templateConfig(new Consumer<TemplateConfig.Builder>() {
//        //    @Override
//        //    public void accept(TemplateConfig.Builder builder) {
//        //        // 实体类使用我们自定义模板
//        //        builder.entity("templates/myentity.java");
//        //    }
//        //})
//        .templateEngine(new VelocityTemplateEngine())
//        .execute();


// 如果模板引擎是 freemarker
// String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
//String templatePath = "/templates/mapper.xml.vm";
//TemplateConfig template = new TemplateConfig.Builder()
//        //禁用所有模板
//        //.disable()
//        //禁用指定模板
//        //.disable(TemplateType.ENTITY)
//        //service模板路径
//        .service(null)
//        //实现类模板路径
//        .serviceImpl(null)
//        //mapper模板路径
//        .mapper(filePath + "/mapper.java")
//        //xml文件模板路路径
//        .mapperXml("/templates/mapper.xml")
//        //controller层模板路径
//        .controller(filePath + "/controller")
//        .build();
